package com.opengl.textprint

import android.annotation.SuppressLint
import android.content.Context
import android.os.Bundle
import android.text.Html
import android.text.TextUtils
import android.util.Log
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.opengl.textprint.R.id.tv_1
import com.opengl.textprint.utils.GameImageGetter
import kotlinx.coroutines.*

class MainActivity : AppCompatActivity() {

    private val loadHtmlContent =
        "<p style=\"text-align: center\"><strong><span style=\"font-size: 20px\">关于你的一切</span></strong></p><p style=\"min-height: 16px;\"></p><p style=\"min-height: 16px;\"><strong><span style=\"color: rgb(245, 5, 5)\">你叫********。</span></strong>你扎着垂到肩膀的长发，散发着冷酷的气息。</p><p style=\"min-height: 16px;\">&nbsp;</p><img src=\"https://jbs.wanyouyinlikeji.com/pro/userPrivate/338/private_1680767324928_新头像01.jpg\" style=\"width: 100%; \"><p style=\"min-height: 16px;\"></p><p style=\"min-height: 16px;\">你常年生活在自己的家乡——都岛。</p><p style=\"min-height: 16px;\">“都岛”位于**的和山县，5.3平方公里。岛上本地人口只有700人左右，是一个依靠旅游业和渔业支撑的小岛。</p><p style=\"min-height: 16px;\">都岛还有一个出名的原因：它是著名推理小说家云龙之的出生地。<strong><span style=\"color: rgb(240, 5, 5)\">他的经典推理小说《**》讲述了一个关于复制人要取代人类的末日危机故事。而你，就是他的忠实书迷。</span></strong></p><p style=\"min-height: 16px;\">对你而言，都岛上不仅是你珍视的家乡，还是你与心上人共同生活过的点点滴滴。</p><p style=\"min-height: 16px;\"><strong><span style=\"color: rgb(255, 0, 0)\">她叫小潮。</span></strong>她是个混血的美少女，跟你同岁，是你的青梅竹马。</p><p style=\"min-height: 16px;\">她的皮肤白皙，身材修长，披着一头及腰的金色长发。</p><p style=\"min-height: 16px;\"></p><img src=\"https://jbs.wanyouyinlikeji.com/pro/userPrivate/338/private_1680767328377_新头像02.jpg\" style=\"width: 100%; \"><p style=\"min-height: 16px;\"></p><p style=\"min-height: 16px;\">你早已将她划入你的人生规划，可在这之前，你有一些事情要跟她说清。</p><p style=\"min-height: 16px;\">今天，是你们初中的毕业典礼。你约她出来见面，要把心里的话，说给她听......</p><p style=\"min-height: 16px;\"></p><p style=\"text-align: center\"><strong>【你现在可以主动夸一夸对方，之后点击<span style=\"color: rgb(247, 2, 2)\">“完成阅读”</span>按钮】</strong></p>"
    private val TEXT_ALIGN_RIGHT = "(?<=>).{0,1000}?(?=<)"
    
    lateinit var tvContent: TextView
    
    val P标签段落数组 = arrayListOf<String>()
    var length = 0

    var index = 0

    var content = ""

    var showText = ""

    val place = "&ensp;"

    var 标签数组序号 = 0

    lateinit var context : Context

    @SuppressLint("MissingInflatedId")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val textBuilder = StringBuilder();
        val P = loadHtmlContent.split("</p>")
        context = this
        for (p in P) {
            P标签段落数组.add(ch("$p</p>", textBuilder))
            if (p.contains("<img")) {
                var img = arrayListOf<String>()
                var ss = 0;
                while (true) {
                    val imgs = p.indexOf("<img", ss)
                    if (imgs == -1) break
                    val src = p.indexOf("src=", imgs)
                    val iEnd = p.indexOf(">", imgs)
                    ss = if (src > iEnd) {
                        iEnd;
                    } else {
                        val srcEnd = p.indexOf("\"", src + 5)
                        val srcSource = p.substring(src + 5, srcEnd)
                        Log.d("======= P标签段落数组 中的 img ", srcSource)
                        p.indexOf(">", srcEnd)
                    }
                }
            }
        }
        for (s in P标签段落数组) {
            Log.d("======= P标签段落数组", s)
        }


        showText = textBuilder.toString();
        length = showText.length

        tvContent = findViewById<TextView>(tv_1)
        tvContent.setOnClickListener {
            addText()
        }

    }

    fun ch(text : String, textBuilder: StringBuilder): String {
        val errr = Regex(TEXT_ALIGN_RIGHT)
        val builder = StringBuilder()
        var start = 0;
        val uuu = errr.findAll(text, 0).iterator()
        while (uuu.hasNext()) {
            val it = uuu.next()
            val value = it.value
            if (!TextUtils.isEmpty(value)) {
                builder.append(text.substring(start, it.range.first))
                    .append(place)
                if (value != "&nbsp;") {
                    textBuilder.append(value).append("~")
                }
                start = it.range.first + value.length
            }
        }
        val s = builder.toString();
        return if (TextUtils.isEmpty(s)) {
            text
        } else {
            builder.append(text.substring(start))
            builder.toString()
        }
    }

    fun addText() {
        if (index < length) {
            if (content.contains(place) || content.contains("~")) {
                val pp = showText.subSequence(index, index + 1)
                content = if (pp == "~") {
                    content.replaceFirst(place, "")
                } else {
                    content.replaceFirst(place, "$pp$place")
                }
                CoroutineScope(Dispatchers.IO).launch {
                    val sp = Html.fromHtml(content, Html.TO_HTML_PARAGRAPH_LINES_INDIVIDUAL,
                        GameImageGetter(context, 1080), null)
                    delay(50)
                    launch(Dispatchers.Main) {
                        tvContent.text = sp
                        index++
                        addText()
                    }
                }
            } else {
                content += P标签段落数组[标签数组序号]
                标签数组序号++
                addText()
            }
        } else {
            Log.d("=======", "打字效果结束")
        }
    }
}